﻿using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Request
{
    /// <summary>
    /// Contrato de dados de solicitação para filtro de politica de corretagem
    /// </summary>
    [DataContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Request", Name = "FiltroPoliticaCorretagemRequest")]
    public class FiltroPoliticaCorretagemRequest
    {
        #region Atributos

        /// <summary>
        /// Codigo da política de corretagem
        /// </summary>
        private int? _codigo;

        /// <summary>
        /// Data inicial de vigência da política de corretagem
        /// </summary>
        private DateTime? _dataInicial;

        /// <summary>
        /// Data final de vigência da política de corretagem
        /// </summary>
        private DateTime? _dataFinal;

        /// <summary>
        /// Descrição da política de corretagem
        /// </summary>
        private string _descricao;

        /// <summary>
        /// Tipo de aplicação da política de corretagem
        /// </summary>
        private DataContract.Request.TipoAplicacaoPoliticaRequest _tipoAplicacao;

        /// <summary>
        /// Tabela de corretagem padrão para política de corretagem
        /// </summary>
        private DataContract.Request.TabelaCorretagemRequest _tabelaPadrao;

        /// <summary>
        /// Tabela de corretagem de benefício para política de corretagem
        /// 
        /// Obs: Propriedade retorna nulo na consulta, portanto somente é carregada quando
        /// obter uma politica especifica.
        /// </summary>
        private DataContract.Request.TabelaCorretagemRequest _tabelaBeneficio;

        /// <summary>
        /// Indica se existe verificações a efetuar
        /// </summary>
        private bool? _efetuarVerificacao;

        /// <summary>
        /// Tipo de controle de benefício para a política de corretagem
        /// </summary>
        private Enum.TipoControleBeneficio? _tipoControleBeneficio;

        #endregion

        #region Propriedades

        /// <summary>
        /// Codigo da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public int? Codigo
        {
            get
            {
                return _codigo;
            }
            set
            {
                _codigo = value;
            }
        }

        /// <summary>
        /// Data inicial de vigência da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public DateTime? DataInicial
        {
            get
            {
                return _dataInicial;
            }
            set
            {
                _dataInicial = value;
            }
        }

        /// <summary>
        /// Data final de vigência da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public DateTime? DataFinal
        {
            get
            {
                return _dataFinal;
            }
            set
            {
                _dataFinal = value;
            }
        }

        /// <summary>
        /// Descrição da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public string Descricao
        {
            get
            {
                return _descricao;
            }
            set
            {
                _descricao = value;
            }
        }

        /// <summary>
        /// Tipo de aplicação da política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public DataContract.Request.TipoAplicacaoPoliticaRequest TipoAplicacao
        {
            get
            {
                return _tipoAplicacao;
            }
            set
            {
                _tipoAplicacao = value;
            }
        }

        /// <summary>
        /// Tabela de corretagem padrão para política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public DataContract.Request.TabelaCorretagemRequest TabelaPadrao
        {
            get
            {
                return _tabelaPadrao;
            }
            set
            {
                _tabelaPadrao = value;
            }
        }

        /// <summary>
        /// Tabela de corretagem de benefício para política de corretagem
        /// 
        /// Obs: Propriedade retorna nulo na consulta, portanto somente é carregada quando
        /// obter uma politica especifica.
        /// </summary>
        [DataMember(IsRequired = false)]
        public DataContract.Request.TabelaCorretagemRequest TabelaBeneficio
        {
            get
            {
                return _tabelaBeneficio;
            }
            set
            {
                _tabelaBeneficio = value;
            }
        }

        /// <summary>
        /// Indica se existe verificações a efetuar
        /// </summary>
        [DataMember(IsRequired = false)]
        public bool? EfetuarVerificacao
        {
            get
            {
                return _efetuarVerificacao;
            }
            set
            {
                _efetuarVerificacao = value;
            }
        }

        /// <summary>
        /// Tipo de controle de benefício para a política de corretagem
        /// </summary>
        [DataMember(IsRequired = false)]
        public Enum.TipoControleBeneficio? TipoControleBeneficio
        {
            get
            {
                return _tipoControleBeneficio;
            }
            set
            {
                _tipoControleBeneficio = value;
            }
        }

        #endregion

        #region Construtores

        /// <summary>
        /// Construtor FiltroPoliticaCorretagemRequest
        /// </summary>
        public FiltroPoliticaCorretagemRequest() { }

        /// <summary>
        /// Construtor FiltroPoliticaCorretagemRequest
        /// </summary>
        /// <param name="codigo"></param>
        /// <param name="dataInicial"></param>
        /// <param name="dataFinal"></param>
        /// <param name="descricao"></param>
        /// <param name="tipoAplicacao"></param>
        /// <param name="tabelaPadrao"></param>
        /// <param name="tabelaBeneficio"></param>
        /// <param name="efetuarVerificacao"></param>
        /// <param name="tipoControleBeneficio"></param>
        public FiltroPoliticaCorretagemRequest(int? codigo, DateTime? dataInicial, DateTime? dataFinal, string descricao, DataContract.Request.TipoAplicacaoPoliticaRequest tipoAplicacao, DataContract.Request.TabelaCorretagemRequest tabelaPadrao, DataContract.Request.TabelaCorretagemRequest tabelaBeneficio, bool? efetuarVerificacao, Enum.TipoControleBeneficio? tipoControleBeneficio)
        {
            this._codigo = codigo;
            this._dataInicial = dataInicial;
            this._dataFinal = dataFinal;
            this._descricao = descricao;
            this._tipoAplicacao = tipoAplicacao;
            this._tabelaPadrao = tabelaPadrao;
            this._tabelaBeneficio = tabelaBeneficio;
            this._efetuarVerificacao = efetuarVerificacao;
            this._tipoControleBeneficio = tipoControleBeneficio;
        }

        #endregion Construtores
    }
}